<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        'use strict';
        console.dir(Object);
        let p={
            firstName:'a',
            lastName:'b'
        }
        p.fullName='a-b';
        console.log(p);
        // 需求 改动firstName  d  fullName自动变为 d-b  改动lastName f fullName自动变为 d-f  当我改动fullName  u-o  fistName自动变为u  lastName自动变为 o
        // 第一参数：对象 第二个参数：添加的属性名 三个：描述

        Object.defineProperty(p,'fullName',{
            // getter方法，当访问fullName,生成fullName 
            get(){
                return this.firstName + '-' + this.lastName;
                return this
            },
            // setter劫持
            set(value){
                console.log(value);
                let arr=value.split('-');
                console.log(arr);
                this.firstName=arr[0];
                this.lastName=arr[1];
            }
        })
        console.log(p);
        p.firstName='r';
        p.lastName='p';
        p.fullName='p-o';

        // Object.defineProperty()监听的是对象的属性，只能监听对象，不能监听数组

        let obj={
            name:'ysn'
        }
        Object.defineProperty(obj,'sex',{
            // 属性值
            value:'男',
            // 对象的该属性是否可以被修改 可以true 不可以false 普通模式下不能被修改，不会报错，但是严格模式下 会报错
            writable:true,
            // 对象的该属性是否可以被删除
            // configurable:false
            // 对象的该属性是否可以被枚举
            enumerable:false
        })
        // obj.sex='女';
        // delete obj.sex;
        console.log(obj);
        for(let key in obj){
            console.log(key);
        }
    </script>
</body>
</html>